#include <stdio.h>
#include <dirent.h>// 在这个文件夹下对所有的目录进行控制
#include <string.h>

void ExploreDIR(const char *dirPath)
{
    // 打开文件夹
    DIR *dir = opendir(dirPath);// 打开文件夹
    if(dir == NULL)
    {
        printf("打开文件夹失败\n");
        return;
    }

    // 读取文件夹中的内容
    struct dirent *entry = NULL;
    
    // 使用while循环读取文件夹中的内容
    while((entry = readdir(dir)) != NULL)
    {
        // 过滤掉当前目录和上级目录
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
        {
            continue;
        }
        // 
        if (entry->d_type == DT_DIR)
        {
            printf("目录: %s\n", entry->d_name);
        }
        else
        {
            printf("文件: %s 类型：%d\n", entry->d_name, entry->d_type);
        }
        // 执行其他操作...
        // 这里可以添加对文件的操作
    }
    closedir(dir);// 好习惯
}

// 递归遍历文件夹
void ExploreDIR2(const char *dirPath, int deepth)
{
    // 打开文件夹
    DIR *dir = opendir(dirPath);// 打开文件夹
    if(dir == NULL)
    {
        printf("打开文件夹失败\n");
        return;
    }

    // 读取文件夹中的内容
    struct dirent *entry = NULL;
    
    // 使用while循环读取文件夹中的内容
    while((entry = readdir(dir)) != NULL)
    {
        // 过滤掉当前目录和上级目录
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
        {
            continue;
        }
        for (int i = 0; i < deepth; i++)
            printf("---");
        printf("文件: %s\n", entry->d_name);
        if (entry->d_type == DT_DIR)
        {
            char path[1024] = { 0 };
            sprintf(path, "%s/%s", dirPath, entry->d_name);

            ExploreDIR2(path, deepth + 1);// 递归调用
        }
    }
    closedir(dir);// 好习惯
}

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        printf("命令行参数数量不为2!\n");
        return -1;
    }
    ExploreDIR2(argv[1], 0);// 递归遍历文件夹
    return 0;
}